package cn.xuguowen.config;

import cn.xuguowen.interceptor.SqlBeautyInterceptor;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ClassName: MyBatisConfig
 * Package: cn.xuguowen.config
 * Description:
 *
 * @Author 徐国文
 * @Create 2023/2/19 14:43
 * @Version 1.0
 */
@Configuration
public class MyBatisConfig {
    /**
     * 目前如果说我们在这个方法上加了一个@Bean的注解，只要我们引入他所在的模块之后，就可以使用这个对象了！
     * 我目前想让他做到SpringBoot的自动装配：当满足什么条件的时候我才创建这样的一个对象，然后将它交给IOC容器进行管理。
     * @ConditionOnProperty注解:它的意思就是说当你在yaml配置文件配置了一致的key，他才会去加载这个类并创建对象交给IOC容器进行管理。和Druid一个道理
     * 这个注解下有这样的三个属性，关于这三个注解的解释看这样的一篇博客：
     * https://blog.csdn.net/qq_42145871/article/details/118310230
     * ① havingValue = "true",matchIfMissing = true的时候：无论是否在配置文件中进行了相关的配置，都会加载这个类
     * ② havingValue = "true",matchIfMissing = false的时候：只有在配置文件中做了相关的配置，才会去加载这个类.
     *      sql:beauty:show = true的时候：加载这样的一个类
     *      sql:beauty:show = false的时候：不会加载这样的一个类。正如上面所说的
     * @return
     */
    @Bean
    @ConditionalOnProperty(value = "sql.beauty.show",havingValue = "true",matchIfMissing = false)
    public SqlBeautyInterceptor sqlBeautyInterceptor() {
        return new SqlBeautyInterceptor();
    }

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
